package org.wlc.demov2;

import org.springframework.web.util.pattern.PathPattern;
import org.wlc.demov1.Matter;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 王立朝
 * @date 2022/5/24
 * @description: 是`IMenu`接口的实现类，主要是承载建造过程中的填充器。相当于这是一套承载物料和创建者中间衔接的内容。
 */
public class DecorationPackageMenu implements IMenu {

    /**
     * 装修清单
     */
    private List<Matter> list = new ArrayList<>();

    /**
     * 装修价格
     *
     */
    private BigDecimal price = BigDecimal.ZERO;
    /**
     * 面积
     */
    private BigDecimal area;
    /**
     * 装修等级： 豪华欧式，轻奢田园，现代简约
     */
    private String grade;

    public DecorationPackageMenu() {
    }

    public DecorationPackageMenu(BigDecimal area, String grade) {
        this.area = area;
        this.grade = grade;
    }

    /**
     * 吊顶
     *
     * @param matter
     * @return
     */
    @Override
    public IMenu appendCeiling(Matter matter) {
        // 吊顶
        list.add(matter);
        price= price.add(area.multiply(new BigDecimal("0.2")).multiply(matter.price()));
        return this;
    }

    /**
     * 涂料
     *
     * @param matter
     * @return
     */
    @Override
    public IMenu appendCoat(Matter matter) {
        list.add(matter);
        price = price.add(area.multiply(new BigDecimal("1.4")).multiply(matter.price()));
        return this;
    }

    /**
     * 地板
     *
     * @param matter
     * @return
     */
    @Override
    public IMenu appendFloor(Matter matter) {
        list.add(matter);
        price = price.add(area.multiply(matter.price()));
        return this;
    }

    /**
     * 地砖
     *
     * @param matter
     * @return
     */
    @Override
    public IMenu appendTile(Matter matter) {
        list.add(matter);
        price = price.add(area.multiply(matter.price()));
        return this;
    }


    /**
     * 明细
     *
     * @return
     */
    @Override
    public String getDetail() {
        StringBuilder detail = new StringBuilder("\r\n-------------------------------------------------------\r\n" +
                "装修清单" + "\r\n" +
                "套餐等级：" + grade + "\r\n" +
                "套餐价格：" + price.setScale(2, BigDecimal.ROUND_HALF_UP) + " 元\r\n" +
                "房屋面积：" + area.doubleValue() + " 平米\r\n" +
                "材料清单：\r\n");

        for (Matter matter: list) {
            detail.append(matter.scene()).append("：").append(matter.brand()).append("、").append(matter.model()).append("、平米价格：").append(matter.price()).append(" 元。\n");
        }

        return detail.toString();
    }
}
